#include"BlockQueue.hpp"
#include"Task.hpp"

//在这个文件里将进行生产者消费者的创建以及让他们进行交互（线程间的通信）
void* routine(void* args)
{
    //先强制转换完，然后生产者开始往阻塞队列里面写入
    BlockQueue<task_t>* _queue = static_cast<BlockQueue<task_t>*>(args);
    // int a = 0,b = 0;
    while(1)
    {
        // sleep(1);
        std :: cout << "生产中" << std :: endl;
        _queue->Equeue(Download);
        // a+=1,b+=2;
    }
    return nullptr;
}

void* prounte(void* args)
{
    //先强制转换完，然后消费者开始往阻塞队列里面读取
    BlockQueue<task_t>* _queue = static_cast<BlockQueue<task_t>*>(args);
    while(1)
    {
        sleep(1);
        // std :: cout << "消费者成功拿到了数据" << std :: endl;
        _queue->Pop();
    }
    return nullptr;
}

int main()
{
    BlockQueue<task_t>* bq = new BlockQueue<task_t>(); //这里进行阻塞队列的创建，把它传入生产者和消费者中，实现模型
    pthread_t p,q; //一个是生产者（前者），一个是消费者（后者）
    pthread_create(&p,nullptr,routine,bq);
    pthread_create(&q,nullptr,prounte,bq);

    pthread_join(p,nullptr);
    pthread_join(q,nullptr);
    delete bq;
    return 0;
}



//测试代码不用管
// int main()
// {
//     std :: cout << 1 << std :: endl;
//     return 0;
// }